/**
 * util.h
 * \file
 * \author Marco Luisi
 * \brief Header file di utilità
 *
 *  Created on: Jan 9, 2010
 *      Author: Marco Luisi
 */

#ifndef UTIL_H_
#define UTIL_H_


#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define MAXLINE 4096
#define MAX_INT_STRING 10 //da INT_MAX, spostare in client parse?
#define ERR -1

#define STDIN  0
#define STDOUT 1
#define STDERR 2


/* Se s è NULL, restituisce -1. */
#define EC_NULL(s) if((s) == NULL) {return -1;}
/* Se s è NULL, stampa messaggio d'errore e restituisce -1. */
#define EC_NULL_P(s,m) if ((s) == NULL) {perror(m); return -1;}
/* Se s è NULL, esegue f e poi restituisce -1 */
#define EC_NULL_F(s,f) if ((s) == NULL) {f; return -1;}
/* Se s è NULL, stampa messaggio d'errore ed esce. */
#define EC_NULL_E(s,m) if ((s) == NULL) {perror(m); exit(EXIT_FAILURE);}//forse non serve

/* Se s è -1, restituisce -1. */
#define EC_M1(s) if ((s) == -1) {return -1;} //utile?
#define EC_M1_N(s) if((s) == -1) {return NULL;} // inutile?
/* Se s è -1, stampa messaggio d'errore e restituisce -1. */
#define EC_M1_P(s,m) if ((s) == -1) {perror(m); return -1;}
/* Se s è -1, esegue f e restituisce -1. */
#define EC_M1_F(s,f) if ((s) == -1) {f; return -1;}
/* Se s è -1, stampa messaggio d'errore ed esce. */
#define EC_M1_E(s,m) if((s) == -1) {perror(m); exit(EXIT_FAILURE);}

/* Scrittura su stdout con controllo errore */
#define WRITE(m) EC_M1_E(write(STDOUT, m, strlen(m)), m);//ok con exitfailure?
/* Scrittura di una linea su stdout con controllo errore */
#define WRITELN(m) WRITE(m);WRITE("\n");
//fare macro per scrivere su file il log

#endif /* UTIL_H_ */
